import type { IObject } from '../../util';

interface IModal {
  /**
   * @description  弹窗标题
   */
  title?: string;
  /**
   * @description  帮助宽度
   * @default      1000
   */
  width?: number;
  /**
   * @description  帮助高度
   * @default      600
   */
  height?: number;
}

export type ArrayReturnType<T = any> = [boolean, T];

export interface IFlowParams extends IModal {
  /**
   * @description  表单业务类型
   */
  bizCode: string;
  /**
   * @description  0来源引用或1生成目的单
   * @default      0
   */
  bizType?: 0 | 1;
  /**
   * @description 组织id
   */
  orgId?: string;
  /**
   * @description 租户id
   */
  tenantId?: string;
  /**
   * @description 业务方未传递合同类型值，则直接过滤掉配置了合同类型条件的业务流;业务方传递了合同类型值，则按照合同类型的值进行使用范围的判断
   */
  contractTypes?: string;
  /**
   * @description 主表｜子表
   */
  tableType?: 0 | 1;
}

export interface ICiteSourceParams extends IModal {
  /**
   * @description  当前表单业务类型
   */
  bizCode: string;
  btnMessage?: boolean;
  /**
   * @description  业务流编码（一般从url参数里面取）
   */
  flowCode: string;
  /**
   * @description  当前表单表名
   */
  tableName: string;
  /**
   * @description  来源单据编码
   */
  sourceBizCode?: string;
  /**
   * @description  业务数据（用于后端动态数据参数替换）
   */
  busData?: IObject;
  /**
   * @description  业务明细表名
   */
  detailTables?: string[];
  /**
   * @description  是否自动回填表单
   * @default      false
   */
  autoFill?: boolean;
  /**
   * @description 默认选中的行
   */
  defaultSelectedRows?: IObject[];
  /**
   * @description 默认选中的行的keys
   */
  defaultSelectedKeys?: string[];
  /**
   * @description 主表｜子表
   */
  tableType?: 0 | 1;
}

export interface IPushBillParams extends IModal {
  /**
   * @description  流程编码
   */
  flowCode?: string;
  /**
   * @description   流程实例id
   */
  instanceId?: string;
  /**
   * @description  业务主键id
   */
  bizId: string;
  /**
   * @description  表单业务类型
   */
  bizCode: string;
  /**
   * @description  目的表单业务类型
   */
  targetBizCode?: string;
  /**
   * @description 组织id
   */
  orgId?: string;
  /**
   * @description 租户id
   */
  tenantId?: string;
  /**
   * @description 是否自动打开目的单
   * @default     false
   */
  autoOpen?: boolean;
  /**
   * @description 业务流帮助需要的合同字段
   */
  contractTypes?: string;
  /**
   * @description 主表引用｜子表引用
   */
  tableType?: 0 | 1;
}

export interface IShowFlowInstance {
  /**
   * @description   流程实例id
   */
  instanceId: string;
  /**
   * @description   业务类型
   */
  bizCode?: string;
  /**
   * @description  业务主键id
   */
  bizId?: string;
  /**
   * @description  页面标题
   * @default      业务流实例查看
   */
  appTitle?: string;
}

export interface MappingAllDatasParams {
  targetBizCode: string;
  flowCode: string;
  targetTable: string;
  sourceBizCode?: string;
  configMap?: any;
}

export interface ICheckRuleInfoParams extends IModal {
  /**
   * @description  业务数据（规则校验返回提示信息）
   */
  dataSource?: IObject;

  /**
   * @description  是否查看点击
   */
  isView?: boolean;

  /**
   * @description  保存草稿
   */
  saveDraft?: (ins: any) => any;

  /**
   * @description  继续
   */
  onContinue?: (ins: any) => any;
}

export interface ICiteSourceProps {
  sourceTree: any;
  sourceCount: number;
  busData: any;
  flowCode: string;
  defaultSourceCfg: any;
  detailTables: any;
  /**
   * @description 默认选中的行
   */
  defaultSelectedRows?: IObject[];
  /**
   * @description 默认选中的行的keys
   */
  defaultSelectedKeys?: string[];
}

export interface ITreeNode {
  key: string;
  children?: ITreeNode[];
  [x: string]: any;
}
